#include"user_mgt.c"

// 显示主菜单
void show_main_menu() {
    printf("\n=== 学生管理系统 ===\n");
    printf("1. 登录\n");
    printf("2. 退出\n");
    printf("请选择操作: ");
}

// 显示管理员菜单
void show_admin_menu() {
    printf("\n=== 管理员菜单 ===\n");
    printf("1. 添加学生\n");
    printf("2. 查看学生列表\n");
    printf("3. 修改学生信息\n");
    printf("4. 删除学生\n");
    printf("5. 录入学生成绩\n");
    printf("6. 查看学生成绩\n");
    printf("7. 查看班级成绩分布\n");
    printf("8. 导出班级报告\n");
    printf("9. 升级用户为管理员\n");
    printf("10. 查看个人信息\n");
    printf("11. 修改个人信息\n");
    printf("12. 修改密码\n");
    printf("13. 退出登录\n");
    printf("请选择操作: ");
}

// 显示学生菜单
void show_student_menu() {
    printf("\n=== 学生菜单 ===\n");
    printf("1. 查看个人信息\n");
    printf("2. 修改个人信息\n");
    printf("3. 修改密码\n");
    printf("4. 查看成绩\n");
    printf("5. 导出成绩报告\n");  
    printf("6. 退出登录\n");
    printf("请选择操作: ");
}

int main() {
    UserDatabase db = {0};
    int choice;
    char username[50], password[50];
    int user_index = -1; // 添加用户索引变量

    printf("\n=== 学生管理系统启动 ===\n");
    
    if (!init_database(&db)) {
        printf("错误：数据库初始化失败，程序退出\n");
        return 1;
    }
    
    load_users(&db);
    
    // 仅在没有管理员时创建初始管理员
    create_first_admin(&db);

    while (1) {
        if (user_index == -1) {
            show_main_menu();
            if (scanf("%d", &choice) != 1) {
                clear_input_buffer();
                printf("错误：请输入有效数字\n");
                continue;
            }
            clear_input_buffer();
            
            if (choice == 1) {
                printf("用户名: "); 
                if (scanf("%49s", username) != 1) {
                    clear_input_buffer();
                    printf("错误：无效输入\n");
                    continue;
                }
                
                printf("密码: "); 
                if (scanf("%49s", password) != 1) {
                    clear_input_buffer();
                    printf("错误：无效输入\n");
                    continue;
                }
                clear_input_buffer();
                
                user_index = login(&db, username, password);
                if (user_index >= 0) {
                    printf("\n登录成功！欢迎，%s %s\n", 
                           db.users[user_index].is_admin ? "管理员" : "同学", 
                           username);
                    
                    // 学生首次登录提示修改密码
                    if (!db.users[user_index].is_admin && 
                        strcmp(db.users[user_index].password, DEFAULT_STUDENT_PASSWORD) == 0) {
                        printf("\n安全提示: 您当前使用初始密码，请立即修改密码以确保账户安全！\n");
                    }
                } else {
                    printf("\n登录失败，用户名或密码错误\n");
                }
            } else if (choice == 2) {
                break;
            } else {
                printf("错误：无效选择\n");
            }
        } else {
            if (db.users[user_index].is_admin) {
                show_admin_menu();
                if (scanf("%d", &choice) != 1) {
                    clear_input_buffer();
                    printf("错误：请输入有效数字\n");
                    continue;
                }
                clear_input_buffer();
                
                switch (choice) {
                    case 1: add_student(&db);break;
                    case 2: view_students(&db);break;
                    case 3: update_student(&db);break;
                    case 4: delete_student(&db);break;
                    case 5: input_grade(&db);break;
                    case 6: view_grades(&db, user_index);break;
                    case 7: analyze_class_grades(&db);break;
                    case 8:  export_class_report(&db);break;
                    case 9: promote_to_admin(&db);break;
                    case 10: view_personal_info(&db, user_index);break;
                    case 11: update_personal_info(&db, user_index);break;
                    case 12: change_password(&db, user_index);break;
                    case 13: 
                        user_index = -1; 
                        printf("\n已退出登录\n"); 
                        break;
                    default: printf("错误：无效选择\n");
                }
            } else {
                show_student_menu();
                if (scanf("%d", &choice) != 1) 
                {
                    clear_input_buffer();
                    printf("错误：请输入有效数字\n");
                    continue;
                }
                clear_input_buffer();
                
                switch (choice) {
                    case 1: view_personal_info(&db, user_index);break;
                    case 2: update_personal_info(&db, user_index);break;
                    case 3: change_password(&db, user_index);break;
                    case 4: view_grades(&db, user_index);break;
                    case 5:export_student_report(&db, user_index);break;
                    case 6: 
                        user_index = -1; 
                        printf("\n已退出登录\n"); 
                        break;
                    default: printf("错误：无效选择\n");
                }
            }
        }
    }
    
    // 程序退出前确保保存所有数据
    save_users(&db);
    sqlite3_close(db.db);
    printf("\n=== 系统已退出 ===\n");
    return 0;
}

/*int drop(const char *db_name)
{
    sqlite3 *db;
    int rc =  sqlite3_open (db_name, &db);
    if(rc != SQLITE_OK)
    {
        fprintf(stderr,"can not open database: %s",sqlite3_errmsg(db));
        sqlite3_close(db);
        return -1;
    }
    const char* drop_grades_table = "drop table grades;";
    rc = sqlite3_exec(db,drop_grades_table,NULL,0,NULL);
    if(rc!= SQLITE_OK)
    {
        fprintf(stderr,"Can not drop grades_table:%s",sqlite3_errmsg(db));
        sqlite3_close(db);
        return -1;
    }
    return 0;
}

int main()
{
    drop("stu.db");
    return 0;
}*/